home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Auge 4000 / Auge 4000 #51 (1990-12-01)(Amiga User Gruppe Einzugsgebiet 4000).zip / Auge 4000 #51 (1990-12-01)(Amiga User Gruppe Einzugsgebiet 4000).adf / Msh / Hilfen / AMIGAtoIBM.mod < prev    next >
Text File  |  1990-12-01  |  3KB  |  116 lines

  1. MODULE AMIGAtoIBM;
  2. FROM InOut IMPORT Write, WriteInt, WriteLn, WriteString, ReadString;
  3. FROM SYSTEM IMPORT ADR, ADDRESS;
  4. FROM Exec IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
  5. IMPORT Dos;
  6.  
  7. TYPE Kette = ARRAY [0..100]  OF CHAR;
  8.  
  9. VAR lock, lock2 : Dos.FileLockPtr;
  10.     handle : Dos.FileHandlePtr;
  11.     Name, Name2 : Kette;
  12.     pointer : Dos.FileInfoBlockPtr;
  13.     wert, memblock, i, flag, oldPos, lesen, laenge, schreiben : LONGINT;
  14.     help : POINTER TO CHAR;
  15.     help2 : INTEGER;
  16.  
  17. BEGIN
  18.   REPEAT 
  19.   WriteLn;
  20.   WriteString ("Dies Programm übersetzt die Umlaute von Amiga auf IBM");
  21.   WriteLn; WriteString ("Codierung."); WriteLn;
  22.   WriteString ("Ein Public Domain Programm von:");WriteLn;
  23.   WriteString ("G. Heeke, Eichendorffstr. 28, D-4047 Dormagen 5"); WriteLn;
  24.   WriteString ("Quelldatei: "); ReadString (Name);
  25. (* Datei vorhanden?*)
  26. lock := Dos.Lock (ADR(Name), Dos.sharedLock);
  27. IF lock = 0 THEN 
  28.   WriteLn;
  29.   WriteString ("Datei nicht vorhanden!");
  30. END (*IF*);
  31. UNTIL lock # 0;
  32.  
  33. (* Speicher für FileInfoBlock anfordern*)
  34. pointer := AllocMem (SIZE(Dos.FileInfoBlock),MemReqSet {chip});
  35. IF pointer = NIL THEN
  36. WriteLn;
  37. WriteString ("Nicht genügend Speicher");
  38.   HALT;
  39. END;
  40.  
  41. flag := Dos.Examine (lock,pointer);
  42. IF flag = 0 THEN WriteString ("Fehler!");HALT; END;
  43.  
  44. laenge := pointer^.size;
  45. WriteLn;
  46. WriteString ("Die Quelldatei ist ");
  47. WriteInt (laenge,5);
  48. WriteString (" Bytes lang.");
  49.  
  50. FreeMem (pointer, SIZE(Dos.FileInfoBlock));
  51.  
  52. REPEAT
  53. WriteLn;
  54.   WriteString ("Zieldatei: "); ReadString (Name2);
  55.   WriteLn;
  56.   lock2 := Dos.Lock (ADR(Name2), Dos.exclusiveLock);
  57.   IF lock2 # 0 THEN 
  58.   WriteString ("Die Datei existiert schon!");
  59.     Dos.UnLock (lock2);
  60.   END;
  61. UNTIL lock2 = 0;
  62.  
  63. (*Datei öffnen *);
  64. handle := Dos.Open (ADR(Name),Dos.oldFile);
  65. IF handle = 0 THEN
  66. WriteLn;
  67. WriteString (" Datei existiert nicht! Merkwürdig!??");
  68. HALT;
  69. END;
  70. (* Datei Zeiger an Anfang*);
  71. oldPos := Dos.Seek (handle, 0, Dos.current);
  72.  
  73. (*Speicher für Dateiinhalt bereitstellen*)
  74. memblock := LONGINT(AllocMem (laenge,MemReqSet {public}));
  75. IF memblock = 0 THEN
  76.   WriteLn;
  77.   WriteString ("Nicht genug Speicher!");
  78.   HALT;
  79. END;
  80.  
  81. (*Datei lesen*)
  82. lesen := Dos.Read (handle,memblock,laenge);
  83. Dos.Close (handle);
  84. Dos.UnLock (lock);
  85. (*Dateiinhalt änder*)
  86. wert := memblock;
  87. FOR i := 0 TO laenge DO
  88. help := ADDRESS (wert);
  89. help2 := ORD(help^);
  90.  
  91. CASE help2 OF
  92.  
  93.   167:   help^ := CHR(021)|
  94.   196:   help^ := CHR(142)|
  95.   214:   help^ := CHR(153)|
  96.   220:   help^ := CHR(154)|
  97.   228:   help^ := CHR(132)|
  98.   246:   help^ := CHR(148)|
  99.   252:   help^ := CHR(129)|
  100.   223:   help^ := CHR(225)|
  101. ELSE;
  102. END;  
  103. INC (wert);
  104. END (*FOR*);
  105.  
  106. (*Zieldatei schreiben*)
  107. handle := Dos.Open (ADR(Name2),Dos.newFile);
  108. schreiben := Dos.Write (handle, memblock, laenge);
  109. Dos.Close (handle);
  110.  
  111. Dos.UnLock (lock2);
  112. FreeMem (memblock,laenge);
  113. WriteLn;
  114. WriteString ("Das war's.");
  115. END AMIGAtoIBM.
  116.